/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import java.awt.HeadlessException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Properties;
import javax.swing.JOptionPane;
import principal.frmLogin;
import principal.frmTexto;
import principal.frmTiempo;

/**
 *
 * @author Juan
 */
public class SVCliente extends Thread {

    private int port;
    private String url;
    frmLogin ventana;
    frmTiempo ventana1;
    frmTexto mensaje;
    public static Socket s;
    private String nick;
    public static String resp = "";
    public static String puerto, ip, nombre, empresa;
    public static boolean apagar=true;

    public SVCliente() {
    }
    
    

    public SVCliente(int port, String url, String nick) {
        this.port = port;
        this.url = url;
        this.nick = nick;
    }

    @Override
    public void run() {
        ventana = new frmLogin();
        try {
            s = new Socket(url, port);
            DataInputStream dis = new DataInputStream(s.getInputStream());
            enviarTrama(1, nick);
            while (true) {
                int nCodigo = dis.readInt();
                String mTrama = dis.readUTF();
                switch (nCodigo) {
                    case 1:
                        ventana.setVisible(true);
                        apagar=true;
                        break;
                    case 2:
                        if ("E".equals(mTrama)) {
                            ventana1 = new frmTiempo();
                            ventana1.setVisible(true);
                            ventana.dispose();
                            frmLogin.activo = false;
                            apagar=false;
                        } else {
                            JOptionPane.showMessageDialog(ventana, "Pase a Registrarse");
                        }
                        break;
                    case 3:
                        if ("S".equals(mTrama)) {
                            ventana.setVisible(true);
                            ventana1.dispose();
                            apagar=true;
                        } else {
                            JOptionPane.showMessageDialog(ventana1, "Error");
                        }
                        break;
                    case 4:
                        if ("E".equals(mTrama)) {
                            ventana1 = new frmTiempo();
                            ventana1.setVisible(true);
                            ventana.dispose();
                            frmLogin.activo = false;
                            apagar=false;
                        } else {
                            JOptionPane.showMessageDialog(ventana, "Pase a Registrarse");
                        }
                        break;
                    case 5:
                        if ("S".equals(mTrama)) {
                            ventana.setVisible(true);
                            ventana1.dispose();
                            apagar=true;
                        } else {
                            JOptionPane.showMessageDialog(ventana1, "Error");
                        }
                        break;
                    case 6:
                        if ("A".equals(mTrama)&&apagar==true) {
                            try {
                                enviarTrama(8, "");
                                Runtime.getRuntime().exec("shutdown -p");
                            } catch (Exception e) {
                                // JOptionPane.showMessageDialog(ventana, "Error "+e.getMessage());
                            }
                        }
                        if ("R".equals(mTrama)&&apagar==true) {
                            try {
                                enviarTrama(8, "");
                                Runtime.getRuntime().exec("shutdown -r");
                            } catch (Exception e) {
                                //JOptionPane.showMessageDialog(ventana, "Error " + e.getMessage());
                            }
                        }
                        if (frmLogin.activo == false && !"A".equals(mTrama)) {
                            mensaje = new frmTexto();
                            mensaje.setVisible(true);
                            frmTexto.Texto.setText(mTrama);
                        }
                        break;
                    case 7:
                        SVCliente a = new SVCliente();
                        a.empresa(mTrama);
                        break;
                }
            }
        } catch (IOException | HeadlessException e) {
            JOptionPane.showMessageDialog(null, "No se pudo establecer la Conexion");
        }
    }

    public static void enviarMensaje(String Mensaje) {
        enviarTrama(2, Mensaje);
    }

    public static void enviarTrama(int nCodigo, String mTrama) {
        try {
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            dos.writeInt(nCodigo);
            dos.writeUTF(mTrama);
        } catch (Exception e) {
            //JOptionPane.showMessageDialog(ventana, "No se pudo enviar el mensaje");
        }
    }

    public void leerArchivo() {
        try {
            Properties propiedades = new Properties();
            propiedades.load(new FileInputStream("propiedades.ini"));
            
            nombre=propiedades.getProperty("nombre");
            ip=propiedades.getProperty("ip");
            puerto=propiedades.getProperty("puerto");
            empresa=propiedades.getProperty("empresa");
        } catch (Exception e) {
           // JOptionPane.showMessageDialog(null, "No se encontro el archivo propiedades.ini");
        }
    }
    
    public void empresa(String empresa){
        try {
            FileOutputStream os=new FileOutputStream("empresa.ini");
            Properties propiedades = new Properties();
            propiedades.setProperty("empresa",empresa);
            frmLogin.txtEmpresa.setText("Bienvenidos a "+empresa);
            propiedades.store(os, null);
        } catch (Exception e) {
        }
    }
    
    public void leerEmpresa(){
        try {
            Properties propiedades = new Properties();
            propiedades.load(new FileInputStream("empresa.ini"));
            empresa=propiedades.getProperty("empresa");
        } catch (Exception e) {
           // JOptionPane.showMessageDialog(null, "No se encontro el archivo empresa.ini");
        }
    }

    public static void main(String[] args) {
        SVCliente cliente1 = new SVCliente();
        cliente1.leerArchivo();
        cliente1.leerEmpresa();
        SVCliente cliente = new SVCliente(Integer.parseInt(puerto),ip,nombre);
        cliente.start();
    }
}
